package com.zhongbo.java.fast.order.service;

import com.zhongbo.java.fast.order.exception.BusinessException;
import com.zhongbo.java.fast.order.model.Item;
import com.zhongbo.java.fast.order.model.Order;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 订单服务接口
 */
public interface IOrderService {

    /**
     * 创建订单（带时间模拟参数）
     *
     * @param items       商品列表
     * @param isVIP       是否VIP用户
     * @param currentTime 模拟当前时间（用于测试时间敏感规则）
     */
    Order createOrder(List<Item> items, boolean isVIP, LocalDateTime currentTime) throws BusinessException;

    /**
     * 取消订单（带时间模拟参数）
     *
     * @param orderId     订单ID
     * @param currentTime 模拟当前时间（用于计算超时）
     */
    void cancelOrder(String orderId, LocalDateTime currentTime) throws BusinessException;

    /**
     * 查询订单
     *
     * @param orderId     订单id
     * @param currentTime 模拟指定当前系统时间
     * @return 订单信息
     */
    Order findOrder(String orderId, LocalDateTime currentTime);

    /**
     * 查询全部订单
     *
     * @return 订单信息
     */
    List<Order> listOrder();
}
